package i_grafica;

import java.io.IOException;
import java.util.List;

import javax.vecmath.Point3d;

import estrategia.Controlador;

public class botonesd extends Thread{

	
	private Controlador control;
	private int boton;
	private List<botonesd> lista;
	private double angulo ;
	private Point3d proxPunto;
	private Point3d puntoDireccion;
	private Point3d[] proxPuntos;
	
	public static final int COMENZAR_TRAYECTORIA = 0;
	public static final int GIRO_COMUN = 1;
	public static final int GIRO_Y_AVANZO = 2;
	public static final int LYAPUNOV = 3;
	public static final int CAMPOS_DE_POTENCIAL = 4;
	public static final int BEEP = 5;
	public static final int DIRECT = 6;
	public static final int KEEP_ALIVE = 7;
	public static final int POTENCIAL_UNIDIRECCIONAL = 8;	
	
	public botonesd(Controlador c, int b, List<botonesd> l) {
		control = c;
		boton = b;
		lista = l;
	}
	
	public void setAnguloGiro( double a) {
		angulo = a % Math.PI;		
	}
	
	public void setProximoPunto(Point3d p) {
		proxPunto = p;
	}

	public void setAnguloEntrada(Point3d a) {
		puntoDireccion = a;
	}
	
	public void setProximosPuntos(Point3d[] p) {
		proxPuntos = p;
	}
	
	@Override
	public void run() {
		
		if(boton != KEEP_ALIVE)
		lista.add(this);
		
		try {
			switch(boton) {
					
			case COMENZAR_TRAYECTORIA:
				
				for(int i = 0; i< proxPuntos.length; i++) {				
					
					System.out.println("Voy a " + proxPuntos[i].x + " - " + proxPuntos[i].y);
					control.moverRobotDirect(proxPuntos[i]);					
				}
				break;
				
			case GIRO_COMUN:
				control.girar(angulo);
				break;
				
			case GIRO_Y_AVANZO:
				
				control.girar(proxPunto);
				
				control.moverRobotDirect(proxPunto);
				
				break;
				
			case LYAPUNOV:
				
				
				control.moverRobotMixto(proxPunto);
							 
				break;
				
			case CAMPOS_DE_POTENCIAL:			
				
				
				control.camposDePotencial(proxPunto);
				
				break;
				
			case BEEP:
				
				break;
				
			case DIRECT:
				
				control.moverRobotDirect(proxPunto);
				
				break;
			case POTENCIAL_UNIDIRECCIONAL:
				
				control.camposPotencialUnivectorial ( proxPunto, puntoDireccion);
				//System.out.println(puntoDireccion);
				break;
			case KEEP_ALIVE:
				
				while (true){				
					sleep(30000); //1 seg = 1000 ms -> 30seg de sleep
					System.out.println("beep");
				}		
							
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(boton != KEEP_ALIVE)
				lista.remove(this);			
		}
		
	}
	
	

}
